home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 1.iso / toolbox / src / demos / OpenGL / ideas / draw_logo.c < prev    next >
C/C++ Source or Header  |  1996-11-11  |  18KB  |  527 lines

  1. /*
  2.  * (c) Copyright 1993, Silicon Graphics, Inc.
  3.  * ALL RIGHTS RESERVED 
  4.  * Permission to use, copy, modify, and distribute this software for 
  5.  * any purpose and without fee is hereby granted, provided that the above
  6.  * copyright notice appear in all copies and that both the copyright notice
  7.  * and this permission notice appear in supporting documentation, and that 
  8.  * the name of Silicon Graphics, Inc. not be used in advertising
  9.  * or publicity pertaining to distribution of the software without specific,
  10.  * written prior permission. 
  11.  *
  12.  * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
  13.  * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
  14.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
  15.  * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
  16.  * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
  17.  * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
  18.  * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
  19.  * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
  20.  * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
  21.  * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
  22.  * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
  23.  * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
  24.  * 
  25.  * US Government Users Restricted Rights 
  26.  * Use, duplication, or disclosure by the Government is subject to
  27.  * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
  28.  * (c)(1)(ii) of the Rights in Technical Data and Computer Software
  29.  * clause at DFARS 252.227-7013 and/or in similar or successor
  30.  * clauses in the FAR or the DOD or NASA FAR Supplement.
  31.  * Unpublished-- rights reserved under the copyright laws of the
  32.  * United States.  Contractor/manufacturer is Silicon Graphics,
  33.  * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
  34.  *
  35.  * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
  36.  */
  37. #include <GL/gl.h>
  38.  
  39. #include "objects.h"
  40.  
  41. static float scp[18][3] = {
  42.   {1.000000, 0.000000, 0.000000},    {1.000000, 0.000000, 5.000000},
  43.   {0.707107, 0.707107, 0.000000},    {0.707107, 0.707107, 5.000000},
  44.   {0.000000, 1.000000, 0.000000},    {0.000000, 1.000000, 5.000000},
  45.   {-0.707107, 0.707107, 0.000000},    {-0.707107, 0.707107, 5.000000},
  46.   {-1.000000, 0.000000, 0.000000},    {-1.000000, 0.000000, 5.000000},
  47.   {-0.707107, -0.707107, 0.000000},    {-0.707107, -0.707107, 5.000000},
  48.   {0.000000, -1.000000, 0.000000},    {0.000000, -1.000000, 5.000000},
  49.   {0.707107, -0.707107, 0.000000},    {0.707107, -0.707107, 5.000000},
  50.   {1.000000, 0.000000, 0.000000},    {1.000000, 0.000000, 5.000000},
  51. };
  52.  
  53. static float dcp[18][3] = {
  54.   {1.000000, 0.000000, 0.000000},    {1.000000, 0.000000, 7.000000},
  55.   {0.707107, 0.707107, 0.000000},    {0.707107, 0.707107, 7.000000},
  56.   {0.000000, 1.000000, 0.000000},    {0.000000, 1.000000, 7.000000},
  57.   {-0.707107, 0.707107, 0.000000},    {-0.707107, 0.707107, 7.000000},
  58.   {-1.000000, 0.000000, 0.000000},    {-1.000000, 0.000000, 7.000000},
  59.   {-0.707107, -0.707107, 0.000000},    {-0.707107, -0.707107, 7.000000},
  60.   {0.000000, -1.000000, 0.000000},    {0.000000, -1.000000, 7.000000},
  61.   {0.707107, -0.707107, 0.000000},    {0.707107, -0.707107, 7.000000},
  62.   {1.000000, 0.000000, 0.000000},    {1.000000, 0.000000, 7.000000},
  63. };
  64.  
  65. static float ep[7][9][3] = {
  66.   {
  67.     {1.000000, 0.000000, 0.000000},
  68.     {0.707107, 0.707107, 0.000000},
  69.     {0.000000, 1.000000, 0.000000},
  70.     {-0.707107, 0.707107, 0.000000},
  71.     {-1.000000, 0.000000, 0.000000},
  72.     {-0.707107, -0.707107, 0.000000},
  73.     {0.000000, -1.000000, 0.000000},
  74.     {0.707107, -0.707107, 0.000000},
  75.     {1.000000, 0.000000, 0.000000},
  76.   },
  77.   
  78.   {
  79.     {1.000000, 0.034074, 0.258819},
  80.     {0.707107, 0.717087, 0.075806},
  81.     {0.000000, 1.000000, 0.000000},
  82.     {-0.707107, 0.717087, 0.075806},
  83.     {-1.000000, 0.034074, 0.258819},
  84.     {-0.707107, -0.648939, 0.441832},
  85.     {0.000000, -0.931852, 0.517638},
  86.     {0.707107, -0.648939, 0.441832},
  87.     {1.000000, 0.034074, 0.258819},
  88.   },
  89.   
  90.   {
  91.     {1.000000, 0.133975, 0.500000},
  92.     {0.707107, 0.746347, 0.146447},
  93.     {0.000000, 1.000000, 0.000000},
  94.     {-0.707107, 0.746347, 0.146447},
  95.     {-1.000000, 0.133975, 0.500000},
  96.     {-0.707107, -0.478398, 0.853553},
  97.     {0.000000, -0.732051, 1.000000},
  98.     {0.707107, -0.478398, 0.853553},
  99.     {1.000000, 0.133975, 0.500000},
  100.   },
  101.   
  102.   {
  103.     {1.000000, 0.292893, 0.707107},
  104.     {0.707107, 0.792893, 0.207107},
  105.     {0.000000, 1.000000, 0.000000},
  106.     {-0.707107, 0.792893, 0.207107},
  107.     {-1.000000, 0.292893, 0.707107},
  108.     {-0.707107, -0.207107, 1.207107},
  109.     {0.000000, -0.414214, 1.414214},
  110.     {0.707107, -0.207107, 1.207107},
  111.     {1.000000, 0.292893, 0.707107},
  112.   },
  113.   
  114.   {
  115.     {1.000000, 0.500000, 0.866025},
  116.     {0.707107, 0.853553, 0.253653},
  117.     {0.000000, 1.000000, 0.000000},
  118.     {-0.707107, 0.853553, 0.253653},
  119.     {-1.000000, 0.500000, 0.866025},
  120.     {-0.707107, 0.146447, 1.478398},
  121.     {0.000000, 0.000000, 1.732051},
  122.     {0.707107, 0.146447, 1.478398},
  123.     {1.000000, 0.500000, 0.866025},
  124.   },
  125.   
  126.   {
  127.     {1.000000, 0.741181, 0.965926},
  128.     {0.707107, 0.924194, 0.282913},
  129.     {0.000000, 1.000000, 0.000000},
  130.     {-0.707107, 0.924194, 0.282913},
  131.     {-1.000000, 0.741181, 0.965926},
  132.     {-0.707107, 0.558168, 1.648939},
  133.     {0.000000, 0.482362, 1.931852},
  134.     {0.707107, 0.558168, 1.648939},
  135.     {1.000000, 0.741181, 0.965926},
  136.   },
  137.   
  138.   {
  139.     {1.000000, 1.000000, 1.000000},
  140.     {0.707107, 1.000000, 0.292893},
  141.     {0.000000, 1.000000, 0.000000},
  142.     {-0.707107, 1.000000, 0.292893},
  143.     {-1.000000, 1.000000, 1.000000},
  144.     {-0.707107, 1.000000, 1.707107},
  145.     {0.000000, 1.000000, 2.000000},
  146.     {0.707107, 1.000000, 1.707107},
  147.     {1.000000, 1.000000, 1.000000},
  148.   },
  149.   
  150. };
  151.  
  152. static float en[7][9][3] = {
  153.   {
  154.     {1.000000, 0.000000, 0.000000},
  155.     {0.707107, 0.707107, 0.000000},
  156.     {0.000000, 1.000000, 0.000000},
  157.     {-0.707107, 0.707107, 0.000000},
  158.     {-1.000000, 0.000000, 0.000000},
  159.     {-0.707107, -0.707107, 0.000000},
  160.     {0.000000, -1.000000, 0.000000},
  161.     {0.707107, -0.707107, 0.000000},
  162.     {1.000000, 0.000000, 0.000000},
  163.   },
  164.   
  165.   {
  166.     {1.000000, 0.000000, 0.000000},
  167.     {0.707107, 0.683013, -0.183013},
  168.     {0.000000, 0.965926, -0.258819},
  169.     {-0.707107, 0.683013, -0.183013},
  170.     {-1.000000, 0.000000, 0.000000},
  171.     {-0.707107, -0.683013, 0.183013},
  172.     {0.000000, -0.965926, 0.258819},
  173.     {0.707107, -0.683013, 0.183013},
  174.     {1.000000, 0.000000, 0.000000},
  175.   },
  176.   
  177.   {
  178.     {1.000000, 0.000000, 0.000000},
  179.     {0.707107, 0.612372, -0.353553},
  180.     {0.000000, 0.866025, -0.500000},
  181.     {-0.707107, 0.612372, -0.353553},
  182.     {-1.000000, 0.000000, 0.000000},
  183.     {-0.707107, -0.612372, 0.353553},
  184.     {0.000000, -0.866025, 0.500000},
  185.     {0.707107, -0.612372, 0.353553},
  186.     {1.000000, 0.000000, 0.000000},
  187.   },
  188.   
  189.   {
  190.     {1.000000, 0.000000, 0.000000},
  191.     {0.707107, 0.500000, -0.500000},
  192.     {0.000000, 0.707107, -0.707107},
  193.     {-0.707107, 0.500000, -0.500000},
  194.     {-1.000000, 0.000000, 0.000000},
  195.     {-0.707107, -0.500000, 0.500000},
  196.     {0.000000, -0.707107, 0.707107},
  197.     {0.707107, -0.500000, 0.500000},
  198.     {1.000000, 0.000000, 0.000000},
  199.   },
  200.   
  201.   {
  202.     {1.000000, 0.000000, 0.000000},
  203.     {0.707107, 0.353553, -0.612372},
  204.     {0.000000, 0.500000, -0.866025},
  205.     {-0.707107, 0.353553, -0.612372},
  206.     {-1.000000, 0.000000, 0.000000},
  207.     {-0.707107, -0.353553, 0.612372},
  208.     {0.000000, -0.500000, 0.866025},
  209.     {0.707107, -0.353553, 0.612372},
  210.     {1.000000, 0.000000, 0.000000},
  211.   },
  212.   
  213.   {
  214.     {1.000000, 0.000000, 0.000000},
  215.     {0.707107, 0.183013, -0.683013},
  216.     {0.000000, 0.258819, -0.965926},
  217.     {-0.707107, 0.183013, -0.683013},
  218.     {-1.000000, 0.000000, 0.000000},
  219.     {-0.707107, -0.183013, 0.683013},
  220.     {0.000000, -0.258819, 0.965926},
  221.     {0.707107, -0.183013, 0.683013},
  222.     {1.000000, 0.000000, 0.000000},
  223.   },
  224.   
  225.   {
  226.     {1.000000, 0.000000, 0.000000},
  227.     {0.707107, 0.000000, -0.707107},
  228.     {0.000000, 0.000000, -1.000000},
  229.     {-0.707107, 0.000000, -0.707107},
  230.     {-1.000000, 0.000000, 0.000000},
  231.     {-0.707107, 0.000000, 0.707107},
  232.     {0.000000, 0.000000, 1.000000},
  233.     {0.707107, 0.000000, 0.707107},
  234.     {1.000000, 0.000000, 0.000000},
  235.   },
  236.   
  237. };
  238.  
  239. static void draw_single_cylinder(void) {
  240.   
  241.   glBegin(GL_TRIANGLE_STRIP);
  242.   glNormal3fv(scp[0]); glVertex3fv(scp[0]);
  243.   glNormal3fv(scp[0]); glVertex3fv(scp[1]);
  244.   glNormal3fv(scp[2]); glVertex3fv(scp[2]);
  245.   glNormal3fv(scp[2]); glVertex3fv(scp[3]);
  246.   glNormal3fv(scp[4]); glVertex3fv(scp[4]);
  247.   glNormal3fv(scp[4]); glVertex3fv(scp[5]);
  248.   glNormal3fv(scp[6]); glVertex3fv(scp[6]);
  249.   glNormal3fv(scp[6]); glVertex3fv(scp[7]);
  250.   glNormal3fv(scp[8]); glVertex3fv(scp[8]);
  251.   glNormal3fv(scp[8]); glVertex3fv(scp[9]);
  252.   glNormal3fv(scp[10]); glVertex3fv(scp[10]);
  253.   glNormal3fv(scp[10]); glVertex3fv(scp[11]);
  254.   glNormal3fv(scp[12]); glVertex3fv(scp[12]);
  255.   glNormal3fv(scp[12]); glVertex3fv(scp[13]);
  256.   glNormal3fv(scp[14]); glVertex3fv(scp[14]);
  257.   glNormal3fv(scp[14]); glVertex3fv(scp[15]);
  258.   glNormal3fv(scp[16]); glVertex3fv(scp[16]);
  259.   glNormal3fv(scp[16]); glVertex3fv(scp[17]);
  260.   glEnd();
  261. }
  262.  
  263. static void draw_double_cylinder(void) {
  264.   
  265.   glEnable(GL_NORMALIZE);
  266.   
  267.   glBegin(GL_TRIANGLE_STRIP);
  268.   glNormal3fv(dcp[0]); glVertex3fv(dcp[0]);
  269.   glNormal3fv(dcp[0]);
  270.   glVertex3fv(dcp[1]);
  271.   glNormal3fv(dcp[2]); glVertex3fv(dcp[2]);
  272.   glNormal3fv(dcp[2]);
  273.   glVertex3fv(dcp[3]);
  274.   glNormal3fv(dcp[4]); glVertex3fv(dcp[4]);
  275.   glNormal3fv(dcp[4]);
  276.   glVertex3fv(dcp[5]);
  277.   glNormal3fv(dcp[6]); glVertex3fv(dcp[6]);
  278.   glNormal3fv(dcp[6]);
  279.   glVertex3fv(dcp[7]);
  280.   glNormal3fv(dcp[8]); glVertex3fv(dcp[8]);
  281.   glNormal3fv(dcp[8]);
  282.   glVertex3fv(dcp[9]);
  283.   glNormal3fv(dcp[10]); glVertex3fv(dcp[10]);
  284.   glNormal3fv(dcp[10]);
  285.   glVertex3fv(dcp[11]);
  286.   glNormal3fv(dcp[12]); glVertex3fv(dcp[12]);
  287.   glNormal3fv(dcp[12]);
  288.   glVertex3fv(dcp[13]);
  289.   glNormal3fv(dcp[14]); glVertex3fv(dcp[14]);
  290.   glNormal3fv(dcp[14]);
  291.   glVertex3fv(dcp[15]);
  292.   glNormal3fv(dcp[16]); glVertex3fv(dcp[16]);
  293.   glNormal3fv(dcp[16]);
  294.   glVertex3fv(dcp[17]);
  295.   glEnd();
  296. }
  297.  
  298. static void draw_elbow(void) {
  299.   
  300.   glBegin(GL_TRIANGLE_STRIP);
  301.   glNormal3fv(en[0][0]); glVertex3fv(ep[0][0]);
  302.   glNormal3fv(en[1][0]); glVertex3fv(ep[1][0]);
  303.   glNormal3fv(en[0][1]); glVertex3fv(ep[0][1]);
  304.   glNormal3fv(en[1][1]); glVertex3fv(ep[1][1]);
  305.   glNormal3fv(en[0][2]); glVertex3fv(ep[0][2]);
  306.   glNormal3fv(en[1][2]); glVertex3fv(ep[1][2]);
  307.   glNormal3fv(en[0][3]); glVertex3fv(ep[0][3]);
  308.   glNormal3fv(en[1][3]); glVertex3fv(ep[1][3]);
  309.   glNormal3fv(en[0][4]); glVertex3fv(ep[0][4]);
  310.   glNormal3fv(en[1][4]); glVertex3fv(ep[1][4]);
  311.   glNormal3fv(en[0][5]); glVertex3fv(ep[0][5]);
  312.   glNormal3fv(en[1][5]); glVertex3fv(ep[1][5]);
  313.   glNormal3fv(en[0][6]); glVertex3fv(ep[0][6]);
  314.   glNormal3fv(en[1][6]); glVertex3fv(ep[1][6]);
  315.   glNormal3fv(en[0][7]); glVertex3fv(ep[0][7]);
  316.   glNormal3fv(en[1][7]); glVertex3fv(ep[1][7]);
  317.   glNormal3fv(en[0][8]); glVertex3fv(ep[0][8]);
  318.   glNormal3fv(en[1][8]); glVertex3fv(ep[1][8]);
  319.   glEnd();
  320.   glBegin(GL_TRIANGLE_STRIP);
  321.   glNormal3fv(en[1][0]); glVertex3fv(ep[1][0]);
  322.   glNormal3fv(en[2][0]); glVertex3fv(ep[2][0]);
  323.   glNormal3fv(en[1][1]); glVertex3fv(ep[1][1]);
  324.   glNormal3fv(en[2][1]); glVertex3fv(ep[2][1]);
  325.   glNormal3fv(en[1][2]); glVertex3fv(ep[1][2]);
  326.   glNormal3fv(en[2][2]); glVertex3fv(ep[2][2]);
  327.   glNormal3fv(en[1][3]); glVertex3fv(ep[1][3]);
  328.   glNormal3fv(en[2][3]); glVertex3fv(ep[2][3]);
  329.   glNormal3fv(en[1][4]); glVertex3fv(ep[1][4]);
  330.   glNormal3fv(en[2][4]); glVertex3fv(ep[2][4]);
  331.   glNormal3fv(en[1][5]); glVertex3fv(ep[1][5]);
  332.   glNormal3fv(en[2][5]); glVertex3fv(ep[2][5]);
  333.   glNormal3fv(en[1][6]); glVertex3fv(ep[1][6]);
  334.   glNormal3fv(en[2][6]); glVertex3fv(ep[2][6]);
  335.   glNormal3fv(en[1][7]); glVertex3fv(ep[1][7]);
  336.   glNormal3fv(en[2][7]); glVertex3fv(ep[2][7]);
  337.   glNormal3fv(en[1][8]); glVertex3fv(ep[1][8]);
  338.   glNormal3fv(en[2][8]); glVertex3fv(ep[2][8]);
  339.   glEnd();
  340.   glBegin(GL_TRIANGLE_STRIP);
  341.   glNormal3fv(en[2][0]); glVertex3fv(ep[2][0]);
  342.   glNormal3fv(en[3][0]); glVertex3fv(ep[3][0]);
  343.   glNormal3fv(en[2][1]); glVertex3fv(ep[2][1]);
  344.   glNormal3fv(en[3][1]); glVertex3fv(ep[3][1]);
  345.   glNormal3fv(en[2][2]); glVertex3fv(ep[2][2]);
  346.   glNormal3fv(en[3][2]); glVertex3fv(ep[3][2]);
  347.   glNormal3fv(en[2][3]); glVertex3fv(ep[2][3]);
  348.   glNormal3fv(en[3][3]); glVertex3fv(ep[3][3]);
  349.   glNormal3fv(en[2][4]); glVertex3fv(ep[2][4]);
  350.   glNormal3fv(en[3][4]); glVertex3fv(ep[3][4]);
  351.   glNormal3fv(en[2][5]); glVertex3fv(ep[2][5]);
  352.   glNormal3fv(en[3][5]); glVertex3fv(ep[3][5]);
  353.   glNormal3fv(en[2][6]); glVertex3fv(ep[2][6]);
  354.   glNormal3fv(en[3][6]); glVertex3fv(ep[3][6]);
  355.   glNormal3fv(en[2][7]); glVertex3fv(ep[2][7]);
  356.   glNormal3fv(en[3][7]); glVertex3fv(ep[3][7]);
  357.   glNormal3fv(en[2][8]); glVertex3fv(ep[2][8]);
  358.   glNormal3fv(en[3][8]); glVertex3fv(ep[3][8]);
  359.   glEnd();
  360.   glBegin(GL_TRIANGLE_STRIP);
  361.   glNormal3fv(en[3][0]); glVertex3fv(ep[3][0]);
  362.   glNormal3fv(en[4][0]); glVertex3fv(ep[4][0]);
  363.   glNormal3fv(en[3][1]); glVertex3fv(ep[3][1]);
  364.   glNormal3fv(en[4][1]); glVertex3fv(ep[4][1]);
  365.   glNormal3fv(en[3][2]); glVertex3fv(ep[3][2]);
  366.   glNormal3fv(en[4][2]); glVertex3fv(ep[4][2]);
  367.   glNormal3fv(en[3][3]); glVertex3fv(ep[3][3]);
  368.   glNormal3fv(en[4][3]); glVertex3fv(ep[4][3]);
  369.   glNormal3fv(en[3][4]); glVertex3fv(ep[3][4]);
  370.   glNormal3fv(en[4][4]); glVertex3fv(ep[4][4]);
  371.   glNormal3fv(en[3][5]); glVertex3fv(ep[3][5]);
  372.   glNormal3fv(en[4][5]); glVertex3fv(ep[4][5]);
  373.   glNormal3fv(en[3][6]); glVertex3fv(ep[3][6]);
  374.   glNormal3fv(en[4][6]); glVertex3fv(ep[4][6]);
  375.   glNormal3fv(en[3][7]); glVertex3fv(ep[3][7]);
  376.   glNormal3fv(en[4][7]); glVertex3fv(ep[4][7]);
  377.   glNormal3fv(en[3][8]); glVertex3fv(ep[3][8]);
  378.   glNormal3fv(en[4][8]); glVertex3fv(ep[4][8]);
  379.   glEnd();
  380.   glBegin(GL_TRIANGLE_STRIP);
  381.   glNormal3fv(en[4][0]); glVertex3fv(ep[4][0]);
  382.   glNormal3fv(en[5][0]); glVertex3fv(ep[5][0]);
  383.   glNormal3fv(en[4][1]); glVertex3fv(ep[4][1]);
  384.   glNormal3fv(en[5][1]); glVertex3fv(ep[5][1]);
  385.   glNormal3fv(en[4][2]); glVertex3fv(ep[4][2]);
  386.   glNormal3fv(en[5][2]); glVertex3fv(ep[5][2]);
  387.   glNormal3fv(en[4][3]); glVertex3fv(ep[4][3]);
  388.   glNormal3fv(en[5][3]); glVertex3fv(ep[5][3]);
  389.   glNormal3fv(en[4][4]); glVertex3fv(ep[4][4]);
  390.   glNormal3fv(en[5][4]); glVertex3fv(ep[5][4]);
  391.   glNormal3fv(en[4][5]); glVertex3fv(ep[4][5]);
  392.   glNormal3fv(en[5][5]); glVertex3fv(ep[5][5]);
  393.   glNormal3fv(en[4][6]); glVertex3fv(ep[4][6]);
  394.   glNormal3fv(en[5][6]); glVertex3fv(ep[5][6]);
  395.   glNormal3fv(en[4][7]); glVertex3fv(ep[4][7]);
  396.   glNormal3fv(en[5][7]); glVertex3fv(ep[5][7]);
  397.   glNormal3fv(en[4][8]); glVertex3fv(ep[4][8]);
  398.   glNormal3fv(en[5][8]); glVertex3fv(ep[5][8]);
  399.   glEnd();
  400.   glBegin(GL_TRIANGLE_STRIP);
  401.   glNormal3fv(en[5][0]); glVertex3fv(ep[5][0]);
  402.   glNormal3fv(en[6][0]); glVertex3fv(ep[6][0]);
  403.   glNormal3fv(en[5][1]); glVertex3fv(ep[5][1]);
  404.   glNormal3fv(en[6][1]); glVertex3fv(ep[6][1]);
  405.   glNormal3fv(en[5][2]); glVertex3fv(ep[5][2]);
  406.   glNormal3fv(en[6][2]); glVertex3fv(ep[6][2]);
  407.   glNormal3fv(en[5][3]); glVertex3fv(ep[5][3]);
  408.   glNormal3fv(en[6][3]); glVertex3fv(ep[6][3]);
  409.   glNormal3fv(en[5][4]); glVertex3fv(ep[5][4]);
  410.   glNormal3fv(en[6][4]); glVertex3fv(ep[6][4]);
  411.   glNormal3fv(en[5][5]); glVertex3fv(ep[5][5]);
  412.   glNormal3fv(en[6][5]); glVertex3fv(ep[6][5]);
  413.   glNormal3fv(en[5][6]); glVertex3fv(ep[5][6]);
  414.   glNormal3fv(en[6][6]); glVertex3fv(ep[6][6]);
  415.   glNormal3fv(en[5][7]); glVertex3fv(ep[5][7]);
  416.   glNormal3fv(en[6][7]); glVertex3fv(ep[6][7]);
  417.   glNormal3fv(en[5][8]); glVertex3fv(ep[5][8]);
  418.   glNormal3fv(en[6][8]); glVertex3fv(ep[6][8]);
  419.   glEnd();
  420. }
  421.  
  422. static void bend_forward(void) {
  423.   
  424.   glTranslatef(0.0,  1.000000,  0.0);
  425.   glRotatef (0.1 * (900), 1.0, 0.0, 0.0);
  426.   glTranslatef(0.0,  -1.000000,  0.0);
  427. }
  428.  
  429. static void bend_left(void) {
  430.   glRotatef (0.1 * (-900), 0.0, 0.0, 1.0);
  431.   glTranslatef(0.0, 1.000000, 0.0);
  432.   glRotatef (0.1 * (900), 1.0, 0.0, 0.0);
  433.   glTranslatef(0.0, -1.000000, 0.0);
  434. }
  435.  
  436. static void bend_right(void) {
  437.   glRotatef (0.1 * (900), 0.0, 0.0, 1.0);
  438.   glTranslatef(0.0, 1.000000, 0.0);
  439.   glRotatef (0.1 * (900), 1.0, 0.0, 0.0);
  440.   glTranslatef(0.0, -1.000000, 0.0);
  441. }
  442.  
  443. void draw_logo(void) {
  444.   
  445.   if( MAT_LOGO) {
  446.     glCallList( MAT_LOGO); 
  447.   }
  448.   
  449.   glTranslatef(5.500000,  -3.500000,  4.500000);
  450.   
  451.   glTranslatef(0.0,  0.0,  -7.000000);
  452.   draw_double_cylinder();
  453.   bend_forward();
  454.   draw_elbow();
  455.   glTranslatef(0.0,  0.0,  -7.000000);
  456.   draw_double_cylinder();
  457.   bend_forward();
  458.   draw_elbow();
  459.   glTranslatef(0.0,  0.0,  -5.000000);
  460.   draw_single_cylinder();
  461.   bend_right();
  462.   draw_elbow();
  463.   glTranslatef(0.0,  0.0,  -7.000000);
  464.   draw_double_cylinder();
  465.   bend_forward();
  466.   draw_elbow();
  467.   glTranslatef(0.0,  0.0,  -7.000000);
  468.   draw_double_cylinder();
  469.   bend_forward();
  470.   draw_elbow();
  471.   glTranslatef(0.0,  0.0,  -5.000000);
  472.   draw_single_cylinder();
  473.   bend_left();
  474.   draw_elbow();
  475.   glTranslatef(0.0,  0.0,  -7.000000);
  476.   draw_double_cylinder();
  477.   bend_forward();
  478.   draw_elbow();
  479.   glTranslatef(0.0,  0.0,  -7.000000);
  480.   draw_double_cylinder();
  481.   bend_forward();
  482.   draw_elbow();
  483.   glTranslatef(0.0,  0.0,  -5.000000);
  484.   draw_single_cylinder();
  485.   bend_right();
  486.   draw_elbow();
  487.   glTranslatef(0.0,  0.0,  -7.000000);
  488.   draw_double_cylinder();
  489.   bend_forward();
  490.   draw_elbow();
  491.   glTranslatef(0.0,  0.0,  -7.000000);
  492.   draw_double_cylinder();
  493.   bend_forward();
  494.   draw_elbow();
  495.   glTranslatef(0.0,  0.0,  -5.000000);
  496.   draw_single_cylinder();
  497.   bend_left();
  498.   draw_elbow();
  499.   glTranslatef(0.0,  0.0,  -7.000000);
  500.   draw_double_cylinder();
  501.   bend_forward();
  502.   draw_elbow();
  503.   glTranslatef(0.0,  0.0,  -7.000000);
  504.   draw_double_cylinder();
  505.   bend_forward();
  506.   draw_elbow();
  507.   glTranslatef(0.0,  0.0,  -5.000000);
  508.   draw_single_cylinder();
  509.   bend_right();
  510.   draw_elbow();
  511.   glTranslatef(0.0,  0.0,  -7.000000);
  512.   draw_double_cylinder();
  513.   bend_forward();
  514.   draw_elbow();
  515.   glTranslatef(0.0,  0.0,  -7.000000);
  516.   draw_double_cylinder();
  517.   bend_forward();
  518.   draw_elbow();
  519.   glTranslatef(0.0,  0.0,  -5.000000);
  520.   draw_single_cylinder();
  521.   bend_left();
  522.   draw_elbow();
  523.   
  524.   glDisable(GL_NORMALIZE);
  525. }
  526.  
  527.